package com.xlf.controller.admin;


import com.xlf.domain.Tag;

import com.xlf.service.TagService;

import com.xlf.utils.ResponseResult;
import com.xlf.vo.IsDisableVO;

import io.swagger.v3.oas.annotations.Operation;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 商品标签。
 * 会有一个父标签，其下有细分标签，比如糖度，下面有标准糖、少糖之类的
 */
@io.swagger.v3.oas.annotations.tags.Tag(name = "商品标签", description = "会有一个父标签，其下有细分标签，比如糖度，下面有标准糖、少糖之类的")
@RestController
@RequestMapping("/tag")
@PreAuthorize("hasAuthority('tag')")
public class TagController {

    @Resource
    private TagService tagService;


    /**
     * 后台系统查询所有标签
     * @return  标签数据
     */
    @Operation(summary = "后台系统查询所有标签")
    @PreAuthorize("hasAuthority('tag:tagList')")
    @GetMapping("/tagList")
    public ResponseResult adminTag() {
        return ResponseResult.success("获取后台标签数据成功", tagService.adminTag());
    }


    /**
     * 根据id/id列表删除标签
     * @param tagIdList id列表，可以只存一个
     * @return          执行结果
     */
    @Operation(summary = "根据id/id列表删除标签")
    @CacheEvict(value = "clientCacheMenuList",allEntries = true)
    @PreAuthorize("hasAuthority('tag:delete')")
    @DeleteMapping("/delete")
    public ResponseResult delete(@RequestBody List<Long> tagIdList) {
        tagService.removeByIds(tagIdList);
        return ResponseResult.success("删除标签成功");
    }


    /**
     * 添加标签
     * @param tag   标签对象
     * @return      执行结果
     */
    @Operation(summary = "添加标签")
    @CacheEvict(value = "clientCacheMenuList",allEntries = true)
    @PreAuthorize("hasAuthority('tag:saveOrUpdate')")
    @PostMapping("/saveOrUpdate")
    public ResponseResult saveOrUpdateTag(@RequestBody Tag tag) {
        boolean flag = tagService.saveOrUpdate(tag);
        if (flag)
            return ResponseResult.success("添加或更改标签成功");
        return ResponseResult.error("添加失败，要添加或更改的标签已存在");
    }

    /**
     * 根据id禁用/启用标签
     * @param isDisableVO   菜单项显示对象
     * @return              执行结果
     */
    @Operation(summary = "根据id禁用/启用标签")
    @CacheEvict(value = "clientCacheMenuList",allEntries = true)
    @PostMapping("/tagDisable")
    public ResponseResult foodDisable(@RequestBody IsDisableVO isDisableVO){
        tagService.update()
                .eq("id",isDisableVO.getId())
                .set("status",isDisableVO.getIsDisable()?1:0)
                .update();
        return ResponseResult.success("修改成功");
    }
}